1. Field of the Invention
The present invention relates to the task of developing software. More specifically, the present invention relates to a method and an apparatus for extending a software gadget.
2. Related Art
As people become increasingly reliant on computer systems to manage virtually every aspect of their lives, they look for easier ways to manage and display information that is relevant to them. Initially, people used different programs to manage different aspects of their lives, and they had to execute each program to view the information. For example, they typically used an email client to manage their email, a financial application to manage their finances, and a calendar program to manage their schedule.
As time progressed, these programs became progressively more sophisticated, and people began using fewer programs with more functionality. For example, personal information managers combine the resources of email clients, calendars, contact managers, task list programs, and more. In addition, portal sites began to aggregate information from different locations and to present a user with a unified view of online content. At this point, an individual typically had a couple programs to manage their personal information, and a few aggregation sites to manage the online content that was important to them.
Recent years have seen the development of component frameworks, which allow the user to mix online content and offline content in one consolidated view. Using such a component framework, virtually everything that is available within any program on your computer system or everything that is available online can be viewed and manipulated in a highly-customizable component.
These components, commonly referred to as gadgets, widgets, applets, sidebars, and by various other names, are typically very small pieces of code that provide a single functionality, or several closely related functionalities, such as displaying the weather in a given city, displaying the daily statistics of an investment portfolio, displaying the next appointment on a user's calendar, or providing the top news stories from various news sources. These components are widely distributed, easy to obtain and install, and can be arranged in virtually any manner a user sees fit.
One major drawback with these components that results from their single functionality is that it can be difficult to obtain components for resources that are not widely used. For example, it is very easy to find components to display the current weather in a location of your choosing, but it can be very difficult, if not impossible, to find a component to display information that is relevant to a small group of people. Furthermore, a user frequently uses a component for a specific service, such as tracking a package with a specific parcel carrier, and would like to be able to use that same component with a different related service, such as tracking a package with a different parcel carrier. However, unless the component was written to interact with the second parcel carrier, the user is out of luck.
In order to use components to produce a service which is similar to a service provided by an existing component, a user typically has to wait for such a component to be developed, or must duplicate the functionality of the existing component by writing a new component. Unfortunately, many users lack the skills or resources to write a new component, and components that are of little interest to others might never be developed.
Hence, what is needed is a method for extending the functionality of components without the problems described above.